'''Project Euler Problem 28

Starting with the number 1 and moving to the right in a clockwise direction
a 5 by 5 spiral is formed as follows:

        21 22 23 24 25
        20  7  8  9 10
        19  6  1  2 11
        18  5  4  3 12
        17 16 15 14 13

It can be verified that the sum of both diagonals is 101.

What is the sum of both diagonals in a 1001 by 1001 spiral formed in the
same way?
'''
import time
def spiralDiagSum(size):
    if not size % 2:
        print 'spiralDiagSum(size): size must be odd; incrementing.'
        size += 1
    size = (size+1)/2

    # core
    sum, num = 1, 1
    for i in xrange(1,size):
        # add on a shell
        for loop in xrange(4):
            num += i*2
            sum += num

    return sum    

begin = time.clock()
print 'Starting...'
answer = spiralDiagSum(1001)
print ' ...finished in %.3f ms.' % ((time.clock() - begin) * 1000)

print 'The answer to problem 28 is >> %i <<' % answer